package com.linxianqin.springbootVue.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.linxianqin.springbootVue.domain.dto.SysDeptDTO;
import com.linxianqin.springbootVue.domain.entity.SysDept;
import com.linxianqin.springbootVue.domain.model.TreeSelect;
import com.linxianqin.springbootVue.domain.query.SysDeptQuery;

import java.util.List;

/**
 * <p>
 * 部门表 服务类
 * </p>
 *
 * @author lxq
 * @since 2020-12-16
 */
public interface SysDeptService extends IService<SysDept> {
    /**
     * 查询部门管理数据
     *
     * @param query 部门信息
     * @return 部门信息集合
     */
    List<SysDeptDTO> selectDeptList(SysDeptQuery query);

    /**
     * 查询部门列表（排除节点）
     * @param deptId
     * @return
     */
    List<SysDeptDTO> excludeChild(Long deptId);
    /**
     * 构建前端所需要下拉树结构
     *
     * @param deptList 部门列表
     * @return 下拉树结构列表
     */
    List<TreeSelect> buildDeptTreeSelect(List<SysDeptDTO> deptList);

    /**
     * 校验部门名称是否唯一
     *
     * @param deptDTO 部门信息
     * @return 结果
     */
    String checkDeptNameUnique(SysDeptDTO deptDTO);
    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    int selectNormalChildrenDeptById(Long deptId);
    /**
     * 是否存在子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    boolean hasChildByDeptId(Long deptId);

    /**
     * 递归查询子部门的所有id
     * @param deptId
     * @return
     */
    List<Long> selectDeptListInDept(Long deptId);
    /**
     * 新增保存部门信息
     *
     * @param deptDTO 部门信息
     * @return 结果
     */
    int insertDept(SysDeptDTO deptDTO);
}
